<?php

/**
 * alltosun.com 新浪微博2.0开放接口 AnWeiboV2.php
 * ============================================================================
 * 版权所有 (C) 2009-2011 北京互动阳光科技有限公司，并保留所有权利。
 * 网站地址:    http://www.alltosun.com
 * ----------------------------------------------------------------------------
 * 许可声明：这是一个开源程序，未经许可不得将本软件的整体或任何部分用于商业用途及再发布。
 * ============================================================================
 * $Author: 李微微 $
 * $Date: 2011-11-24 下午09:10:06 $
*/
// if (SAE) {
//     require_once 'saetv2.ex.class.php';
// } else {
//     require_once MODULE_PATH.'/openapi/helper/saetv2.ex.class.php';
// }
require_once MODULE_PATH.'/openapi/helper/saetv2.ex.class.php';


class AnSinaWeiboV2
{
    static $wb;

    public static function checkWeibo()
    {
        $sinaweiboV2_akey = Config::get('sinaweibo_akey');
        $sinaweiboV2_skey = Config::get('sinaweibo_skey');

        if (isset($_SESSION['sinaweibo']['token']['wap_access_token'])) {
            if ($_SESSION['sinaweibo']['token']['wap_access_token']) {
                self::$wb = new SaeTClientV2LOCAL(WEIBOCN_APPKEY, WEIBOCN_APPSKEY, $_SESSION['sinaweibo']['token']['wap_access_token']);
            } else {
                Response::redirect(AnUrl('sinaweiboV2'));
                exit();
            }
        } else if (empty($_SESSION['sinaweibo']['token']['access_token'])) {
            Response::redirect(AnUrl('sinaweiboV2'));
            exit();
        } else {
            self::$wb = new SaeTClientV2LOCAL($sinaweiboV2_akey, $sinaweiboV2_skey, $_SESSION['sinaweibo']['token']['access_token']);
        }
    }

    /**
     * 使用开发者的token，5年才过期
     */
    public static function useDevToken()
    {
        //$token = "2.00Mee5CCNdmu_Efa2d2a75e9efqvSC";
        //$sinaweiboV2_akey = 89718471;
        //$sinaweiboV2_skey = 'f5d32ab96f8c6fbde722ff2d90078563';
        /*$sinaweiboV2_akey = Config::get('sinaweibo_akey');
        $sinaweiboV2_skey = Config::get('sinaweibo_skey');
        $token = '2.00vB79HCNdmu_E78ecec95740cZ78k';
        */
        // 洋河
//         $sinaweiboV2_akey = 1047869278;
//         $sinaweiboV2_skey = "dad1ec3772b09fa664aa021bfe6afc1f";
//         $token = "2.00Mee5CC5fkuIB656f384b8croShqD";

        $sinaweiboV2_akey = 1408459526;
        $sinaweiboV2_skey = "4032da4ff70b5d56a2c2c71b66695097";
        $token = "2.00xguTNDIfk_XBa7b5a15228KjSGLB";

        //$token = '2.00vB79HC0tUfYx17954452730Ah9bX';
        self::$wb = new SaeTClientV2LOCAL($sinaweiboV2_akey, $sinaweiboV2_skey, $token);
    }

    /**
     * 根据用户id获取用户信息
     * @param int $uid
     */
    public static function getUserInfoByIdDev($uid)
    {
        self::useDevToken();
        return self::$wb->show_user_by_id($uid);
    }

    /**
     * 使用开发者的token，5年才过期
     */
    public static function getIdToken()
    {
        /* $sinaweiboV2_akey = 573986550;
        $sinaweiboV2_skey = "4cf35a13b92b092d82a2b9651754ffc1";
        $token = "2.00Mee5CC0aH5qc49150d04b6YX6raC"; */
        // 洋河
        $sinaweiboV2_akey = 1047869278;
        $sinaweiboV2_skey = "dad1ec3772b09fa664aa021bfe6afc1f";
        $token = "2.00Mee5CC5fkuIB656f384b8croShqD";
        //$token = '2.00vB79HC0tUfYx17954452730Ah9bX';
        self::$wb = new SaeTClientV2LOCAL($sinaweiboV2_akey, $sinaweiboV2_skey, $token);
        return self::$wb;
    }

    /**
     * 使用自己的token
     */
    public static function useSelfToken($akey, $skey, $access_token)
    {
        //$token = "2.00Mee5CCNdmu_Efa2d2a75e9efqvSC";
        //$sinaweiboV2_akey = 1610112089;
        //$sinaweiboV2_skey = 'fd84928c6bffa7db4aaab823866a66ca';
        $sinaweiboV2_akey = $akey;
        $sinaweiboV2_skey = $skey;
        $token = $access_token;
        self::$wb = new SaeTClientV2LOCAL($sinaweiboV2_akey, $sinaweiboV2_skey, $token);
    }

    /**
     * 获取当前登录用户及其所关注用户的最新微博
     */
    public static function homeTimeLine()
    {
        self::checkWeibo();
        return self::$wb->home_timeline();
    }

    /**
     * 根据token信息获取用户ID
     * @param string $token
     * @return array
     */
    public static function getTokenInfo($token)
    {
        $o = new SaeTOAuthV2(WEIBOCN_APPKEY, WEIBOCN_APPSKEY);
        return json_decode($o->getTokenInfo( $_SESSION['sinaweibo']['token']['wap_access_token']), true);
    }


    public static function userTimeLine($uid = NULL , $page = 1 , $count = 50 , $since_id = 0, $max_id = 0, $feature = 0, $trim_user = 0, $base_app = 0)
    {
        self::useDevToken();
        return self::$wb->user_timeline_by_id($uid , $page , $count , $since_id , $max_id , $feature , $trim_user , $base_app);
    }
    /**
     * 获取用户信息
     * @param int $user_id
     * @param string $field  想要返回的字段
     */
    public static function getUserInfo($user_id = 0, $field = '')
    {
        return self::getUserInfoById($user_id);
    }

    /**
     * 根据用户id获取用户信息
     * @param int $uid
     */
    public static function getUserInfoById($uid)
    {
        self::checkWeibo();
        return self::$wb->show_user_by_id($uid);
    }

    /**
     * 根据用户昵称获取用户信息
     * @param string $screen_name
     */
    public static function getUserInfoByName($screen_name)
    {
        self::checkWeibo();
        return self::$wb->show_user_by_name($screen_name);
    }

    /**
     * 发微博
     * @param string $status
     * @param string $pic_path
     */
    public static function update($status, $pic_path = '')
    {
        self::checkWeibo();
        if ($pic_path) {
            return self::$wb->upload($status, $pic_path);
        } else {
            return self::$wb->update($status);
        }
    }

    /**
     * 发微博
     * @param string $status
     * @param string $pic_path
     * @param string $akey
     * @param string $skey
     * @param string $token
     */
    public static function updateUserSelf($status, $pic_path = '', $akey, $skey, $token)
    {
        self::useSelfToken($akey, $skey, $token);
        if ($pic_path) {
            return self::$wb->upload($status, $pic_path);
        } else {
            return self::$wb->update($status);
        }
    }

    /**
     * 转发微博
     * @param int $rt_id 要转发的id
     * @param string $status 添加的转发文本，内容不超过140个汉字，不填则默认为“转发微博”。
     * @param int $is_comment 是否在转发的同时发表评论，0：否、1：评论给当前微博、2：评论给原微博、3：都评论，默认为0 。
     */
    public static function rt($rt_id, $status = '', $is_comment = 0)
    {
        self::checkWeibo();
        return self::$wb->repost($rt_id, $status, $is_comment);
    }

    /**
     * 删除某条微博
     * @param int $t_id
     */
    public static function delete($t_id)
    {
        self::checkWeibo();
        return self::$wb->delete($t_id);
    }

    /**
     * 获取官方表情
     * @param string $type 表情类别。"face":普通表情，"ani"：魔法表情，"cartoon"：动漫表情。默认为"face"。可选。
     * @param string $language 语言类别，"cnname"简体，"twname"繁体。默认为"cnname"。可选
     */
    public static function emotions($type = 'face', $language = "cnname")
    {
        self::checkWeibo();
        return self::$wb->emotions($type, $language);
    }

    /**
     * 发布评论
     * @param int $t_id 需要评论的微博ID。
     * @param string $comment 评论内容
     * @param int $comment_or 当评论转发微博时，是否评论给原微博，0：否、1：是，默认为0。
     */
    public static function comment($t_id, $comment, $comment_or = 0)
    {
        self::checkWeibo();
        return self::$wb->send_comment($t_id, $comment, $comment_or);
    }

    /**
     * 删除一条评论
     * @param int $comment_id
     */
    public static function deleteComment($comment_id)
    {
        self::checkWeibo();
        return self::$wb->comment_destroy($comment_id);
    }

    /**
     * 根据用户id关注某人
     * @param int $following_id
     */
    public static function followById($following_id)
    {
        self::checkWeibo();
        return self::$wb->follow_by_id($following_id);
    }

    /**
     * 根据昵称关注某人
     * @param string $name
     */
    public static function followByName($name)
    {
        self::checkWeibo();
        return self::$wb->follow_by_name($name);
    }

    /**
     * 根据id取消关注默认
     * @param int $following_id
     */
    public static function unfollowById($following_id)
    {
        self::checkWeibo();
        return self::$wb->unfollow_by_id($following_id);
    }

    /**
     * 根据昵称取消关注某人
     * @param string $name
     */
    public static function unfollowByName($name)
    {
        self::checkWeibo();
        return self::$wb->unfollow_by_name($name);
    }

    /**
     * 关注某人
     * @param int $following_id
     */
    public static function follow($following_id)
    {
        if (!$following_id) {
            return false;
        }
        return self::followById($following_id);
    }

    /**
     *
     * following_id 是否关注了 follower_id
     * @param int $following_id
     * @param int $follower_id
     */
    public static function isFollow($following_id, $follower_id)
    {
        self::checkWeibo();
        $r = self::$wb->is_followed_by_id($following_id, $follower_id);
        return $r['target']['followed_by'];
    }

    /**
     *
     * following_id 是否关注了 follower_id
     * @param int $following_id
     * @param int $follower_id
     */
    public static function isFans($following_id, $follower_id)
    {
        self::checkWeibo();
        $r = self::$wb->is_followed_by_id($following_id, $follower_id);
        return $r['target']['following'];
    }

    /**
     * 获取用户的关注列表
     * @param int $user_id
     * @param int $limit
     * @param int $cursor 用于分页请求，请求第1页cursor传-1，在返回的结果中会得到next_cursor字段，表示下一页的cursor。
     * 					  next_cursor为0表示已经到记录末尾。
     */
    public static function getFriendsList($user_id, $limit = 10, $cursor = 0)
    {
        self::checkWeibo();
        return self::$wb->friends_by_id($user_id, $cursor, $limit);
    }

    /**
     * 获取用户的粉丝列表
     * @param int $user_id
     * @param int $limit
     * @param int $cursor 用于分页请求，请求第1页cursor传-1，在返回的结果中会得到next_cursor字段，表示下一页的cursor。
     * 					  next_cursor为0表示已经到记录末尾。
     */
    public static function getFollowersList($user_id, $limit = 10, $cursor = 0)
    {
        self::checkWeibo();
        return self::$wb->followers_by_id( $user_id, $limit, $cursor);
    }

   /**
    * 获取互粉好友
    * @param int $user_id
    * @param int $page
    * @param int $count
    * @param int $sort 排序类型，0：按关注时间最近排序，默认为0
    */
    public static function getBilateralList($user_id, $page, $count, $sort = 1)
    {
        self::checkWeibo();
        return self::$wb->bilateral($user_id, $page, $count, $sort);
    }

    /**
     * 勋章发布接口；需要使用appkey申请者帐号发送
     * @param int $user_id
     * @param string $badge_id
     */
    public static function addMedal($user_id, $badge_id)
    {
        // 应用申请者的帐号密码
        $builder_account = 'service@alltosun.com';
        $builder_pwd = 'Alltosun@Weibo@9';

        $str="uids=$user_id&badge_id=".$badge_id;
        //外部调用
        $url="https://api.weibo.com/2/proxy/badges/issue.json?source=".Config::get('sinaweibo_akey');

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_USERPWD, "$builder_account:$builder_pwd");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
        $r = curl_exec($ch);
        curl_close($ch);
        $r = json_decode($r, true);

        /* if (!isset($r['badge_id'])) {
            global $mail;
            $ret = $mail->quickSend( 'songrd@alltosun.com' , 'addMedalError' , 'badge error'.WEIBO_APP_KEY, $user_id.' '.$badge_id.' '.var_export($r, true), 'wangdekang1986@163.com' , '115497282' );
            //mail('songrd@alltosun.com', 'badge error'.WEIBO_APP_KEY, $user_id.' '.$badge_id.' '.var_export($r, true));
        } */
        //return $r['badge_id'];
        return $r;
    }

    /**
     * 获取指定尺寸的用户头像，包括三种尺寸：50 180
     * @param int $user_id
     * @param int $size
     */
    public static function getAvatar($user_id = 0, $size = '')
    {
        $user_info = self::getUserInfoById($user_id);
        if ($size) {
            return self::changeAvatar($user_info['profile_image_url'], $size);
        }
        return $user_info['profile_image_url'];
    }

    /**
     * 获取指定大小的weibo头像
     * @param string $avatar
     * @param int $size
     * 50*50的地址：http://tp2.sinaimg.cn/2107401821/50/0/1
     * 180*180的地址：http://tp2.sinaimg.cn/2107401821/180/0/1
     * @return string
     */
    public static function changeAvatar($avatar, $size = 180)
    {
        if (empty($avatar)) return '';

        $url = parse_url($avatar);

        $paths = explode('/', $url['path']);
        $paths[2] = $size;
        $url['path'] = implode('/', $paths);

        return 'http://'.$url['host'].$url['path'];
    }

   /**
     * at联想
     * @param string $q
     */
    public static function atUsers($q)
    {
        global $mc_wr;

        $key = 'at_suggestion_'.$q;
        $mc_suggestion = $mc_wr->get($key);
        if ($mc_suggestion) {
            return $mc_suggestion;
        }

        self::checkWeibo();
        $r = self::$wb->search_at_users($q);

        $mc_wr->set($key, $r, 3600);
        return $r;
    }

    /**
     *根据微博id,获取微博详情页面地址
     * @param int $user_id
     * @param int $t_id
     */
    public static function getTUrl($user_id, $t_id)
    {
        self::checkWeibo();
        if (!$t_id || !$user_id) {
            return '';
        }
        $mid_info = self::$wb->querymid($t_id);
        return "http://weibo.com/{$user_id}/{$mid_info['mid']}";
    }

    /**
     * 批量获取微博的转发数和评论数,多个之间用逗号分隔，最多不超过100个。
     * @param array $ids 一维数组吧
     */
    public static function getTRtCommentNum($ids)
    {
        self::useDevToken();
        return self::$wb->get_t_rt_comment_num($ids);
        //$source = Config::get('sinaweibo_akey');
        //$url = 'https://api.weibo.com/2/statuses/count.json?source='.$source.'&access_token=2.00Mee5CC_J4WWB6031230be62W9lUC&ids='.$ids ;
        //return curl_get($url);
    }

    /**
     * 根据用户id获取用户信息（使用互动阳光token）
     * @param int $uid
     */
    public static function getUserInfoFromAlltosun($uid)
    {
        //$source = Config::get('sinaweibo_akey');
        self::useDevToken();
        return self::$wb->show_user_by_id($uid);
        //$url = 'https://api.weibo.com/2/users/show.json?source='.$source.'&access_token=2.00Mee5CC_J4WWB54a8017c8biHCpQB&uid='.$uid ;
        //return curl_get($url);
    }

    /**
     * 更换头像
     * return array()  返回用户信息
     */
    public static function update_avatar_image($image_path)
    {
        self::checkWeibo();
        $r = self::$wb->update_profile_image($image_path);
        return $r;
    }

    /**
     * 根据用户id获取用户信息（使用互动阳光token）
     * @param array $query
     */
    public static function searchStatusesHigh($query)
    {
        //$source = Config::get('sinaweibo_akey');
        self::useDevToken();
        return self::$wb->search_statuses_high($query);
        //return self::$wb->search_topics($query);

    }

    /**
     * 根据话题搜索微博
     * @param str $topic
     */
    public static function searchTopics($topic, $count = 10, $page = 1)
    {
        //$source = Config::get('sinaweibo_akey');
        self::useDevToken();
        return self::$wb->search_topics($topic, $count, $page);
    }

    /**
     *
     * following_id 是否关注了 follower_id
     * @param int $following_id
     * @param int $follower_id
     */
    public static function devIsFollow($following_id, $follower_id)
    {
        self::useDevToken();
        $r = self::$wb->is_followed_by_id($following_id, $follower_id);
        return $r['target']['followed_by'];
        //return $r;
    }

    /**
     *
     * 获取@当前用户的微博列表
	 * @param int $page 返回结果的页序号。
	 * @param int $count 每次返回的最大记录数（即页面大小），不大于200，默认为20。
	 * @param int $since_id 若指定此参数，则只返回ID比since_id大的微博消息（即比since_id发表时间晚的微博消息）。可选。
	 * @param int $max_id 若指定此参数，则返回ID小于或等于max_id的提到当前登录用户微博消息。可选。
	 * @param int $filter_by_author 作者筛选类型，0：全部、1：我关注的人、2：陌生人，默认为0。
	 * @param int $filter_by_source 来源筛选类型，0：全部、1：来自微博、2：来自微群，默认为0。
	 * @param int $filter_by_type 原创筛选类型，0：全部微博、1：原创的微博，默认为0。
	 * @return array
     */
    public static function mentions($page=1, $count=50, $since_id = 0, $max_id=0, $filter_by_author=0, $filter_by_source=0, $filter_by_type=0)
    {
        self::useDevToken();
        $r = self::$wb->mentions($page, $count, $since_id, $max_id, $filter_by_author, $filter_by_source, $filter_by_type);
        return $r;
    }

    /**
     * 发微博
     * @param string $status
     * @param string $pic_path
     */
    public static function lotteryUpdate($access_token, $status, $pic_path = '')
    {
        self::useLotteryToken($access_token);
        if ($pic_path) {
            return self::$wb->upload($status, $pic_path);
        } else {
            return self::$wb->update($status);
        }
    }
}
?>